package j12;

public class J12_AccessModifier {
	
	//메서드
	String defaultHello() { return "Hello";}
	private String privateHello() {return "Hello";}
	

	public static void main(String[] args) {
		//접근 지정자 : access modifier
		//객체지향 3가지 특성 중 캡슐화와 관련
		//default, private, protected, public
		//default로 선언된 클래스에 대한 객체 선언
		//같은 패키지 내에 J12_AccessModifier과
		//J12_DefaultClass이 존재하므로 접근 가능
		J12_DefaultClass defaultClass = new J12_DefaultClass();
		defaultClass.name = "자바7";
		defaultClass.sayHello();
		
		//private으로 선언된 멤버변수/메서드 접근 (중요!)
		//private으로 선언된 멤버변수와 메서드를 선언한 클래스 내에서만 접근 가능하고 외부 클래스에서는 접근 불가
		J12_PrivateAccessor privateAccessor = new J12_PrivateAccessor();
		// privateAccessor.name = "자바7";
		// privateAccessor.sayHello();
		
		//protected으로 선언된 멤버변수/메서드 접근 (중요!)
		//protected으로 선언된 멤버변수와 메서드를 선언한 클래스 내에서만 접근 가능하고 외부 클래스에서는 접근 가능
		J12_ProtectedAccessor protectedAccessor = new J12_ProtectedAccessor();
		protectedAccessor.name = "자바7";
		protectedAccessor.sayHello();
		
		//protected으로 선언된 멤버변수/메서드 접근 (중요!)
		//protected으로 선언된 멤버변수와 메서드를 선언한 클래스 내에서만 접근 가능하고 외부 클래스에서는 접근 가능
		J12_PublicAccessor publicAccessor =new J12_PublicAccessor();
		publicAccessor.name ="자바7";
		publicAccessor.sayHello();
		
	}// main

}// class

//접근 지정자가 default로 선언된 클래스
class J12_DefaultClass {
	String name;
	
	// 접근 지정자가 default로 선언된 메서드
	String sayHello() {	return "hello!!";}
}

class J12_PrivateAccessor {
	//접근 지정자가 private으로 선언된 멤버변수
	private  String name;
	//접근 지정자가 private으로 선언된 메서드
	private String sayHello() {return "Hello!!";
	}
}

class J12_ProtectedAccessor {
	//접근 지정자가 protected으로 선언된 멤버변수
	protected  String name;
	//접근 지정자가 protected으로 선언된 메서드
	protected String sayHello() {return "Hello!!";
	}
}

class J12_PublicAccessor {
	//접근 지정자가 public으로 선언된 멤버변수
	public  String name;
	//접근 지정자가 public으로 선언된 메서드
	public String sayHello() {return "Hello!!";
	}
}